/**
 * Generali Solutions d'assurances - Tous droits réservés &copy; 2007 - 2010
 */
package fr.generali.accueilclient.client.om.impl;

import java.util.Date;
import java.util.Locale;

import org.apache.commons.lang.StringUtils;

import fr.generali.accueilclient.client.om.IPersonnePhysique;

/**
 * Implémentation d'un {@link IPersonnePhysique}
 * 
 * @author selrhazala
 */
public class PersonnePhysique extends AbstractPersonne implements IPersonnePhysique {
    
    /**
     * la civilité
     */
    private String civilite;
    
    /**
     * le sexe
     */
    private String sexe;
    
    /**
     * le titre
     */
    private String titre;
    
    /**
     * la date de naissance
     */
    private Date dateNaissance;
    
    /**
     * la date de deces
     */
    private Date dateDeces;
    
    /**
     * le lieu de naissance
     */
    private String lieuNaissance;
    
    /**
     * le code postal de naissance
     */
    private String cpNaissance;
    
    /**
     * le pays de naissance
     */
    private String paysNaissance;
    
    /**
     * la nationalité
     */
    private String nationalite;
    
    /**
     * le nom
     */
    private String nom;
    
    /**
     * le nom de jeune fille
     */
    private String nomJeuneFille;
    
    /**
     * le prénom
     */
    private String prenom;
    
    /**
     * la situation familiale
     */
    private String situationFamiliale;
    
    /**
     * le régime matrimonial
     */
    private String regimeMatrimonial;

    /**
     * le nombre d'enfants
     */
    private String nbEnfants;
    
    /**
     * le statut professionnel
     */
    private String statutProfessionnel1;
    
    /**
     * le statut professionnel
     */
    private String statutProfessionnel2;
    
    /**
     * le statut professionnel
     */
    private String statutProfessionnel3;
    
    /**
     * le statut professionnel
     */
    private String statutProfessionnel4;
    
    /**
     * le regime obligatoire
     */
    private String regimeObligatoire;
    
    /**
     * la gestion tutelle/curatelle
     */
    private String tutelle;
    
    /**
     * le nom du protecteur du client
     */
    private String nomProtecteur;
    
    /**
     * le niveau du statut professionnel (afin de savoir dans quelle table chercher le libellé)
     */
    private int statutProfessionnelNiveau;
    
    /**
     * vivante
     */
    private boolean vivante;
    
    /**
     * Indicateur client est un collaborateur Generali
     */
    private boolean collaborateurGenerali = false;
    
    /**
     * le revenu annuel
     */
    private String revenuAnnuel;

    /**
     * l'année de revenu
     */
    private String anneeRevenu;
    
    /**
     * la precision profession
     */
    private String precisionProfession;
    
    /**
     * {@inheritDoc}
     */
    public void setPersonnePhysique(IPersonnePhysique personnePhysique) {
        civilite = personnePhysique.getCivilite();
        sexe = personnePhysique.getSexe();
        titre = personnePhysique.getTitre();
        dateNaissance = personnePhysique.getDateNaissance();
        dateDeces = personnePhysique.getDateDeces();
        lieuNaissance = personnePhysique.getLieuNaissance();
        cpNaissance = personnePhysique.getCpNaissance();
        paysNaissance = personnePhysique.getPaysNaissance();
        nationalite = personnePhysique.getNationalite();
        nom = personnePhysique.getNom();
        nomJeuneFille = personnePhysique.getNomJeuneFille();
        prenom = personnePhysique.getPrenom();
        situationFamiliale = personnePhysique.getSituationFamiliale();
        regimeMatrimonial = personnePhysique.getRegimeMatrimonial();
        nbEnfants = personnePhysique.getNbEnfants();
        statutProfessionnel1 = personnePhysique.getStatutProfessionnel1();
        statutProfessionnel2 = personnePhysique.getStatutProfessionnel2();
        statutProfessionnel3 = personnePhysique.getStatutProfessionnel3();
        statutProfessionnel4 = personnePhysique.getStatutProfessionnel4();
        regimeObligatoire = personnePhysique.getRegimeObligatoire();
        tutelle = personnePhysique.getTutelle();
        nomProtecteur = personnePhysique.getNomProtecteur();
        statutProfessionnelNiveau = personnePhysique.getStatutProfessionnelNiveau();
        vivante = personnePhysique.isVivante();
        collaborateurGenerali = personnePhysique.isCollaborateurGenerali();
        anneeRevenu = personnePhysique.getAnneeRevenu();
        revenuAnnuel = personnePhysique.getRevenuAnnuel();
        precisionProfession = personnePhysique.getPrecisionProfession();
    }

    /**
     * {@inheritDoc}
     */
    public boolean isPersonnePhysique() {
        return true;
    }

    public String getCivilite() {
        return civilite;
    }

    public void setCivilite(String civilite) {
        this.civilite = civilite;
    }

    public String getSexe() {
        return sexe;
    }

    public void setSexe(String sexe) {
        this.sexe = sexe;
    }

    public String getTitre() {
        return titre;
    }

    public void setTitre(String titre) {
        this.titre = titre;
    }

    public Date getDateNaissance() {
        return dateNaissance;
    }

    public void setDateNaissance(Date dateNaissance) {
        this.dateNaissance = dateNaissance;
    }
    
    public Date getDateDeces() {
        return dateDeces;
    }

    public void setDateDeces(Date dateDeces) {
        this.dateDeces = dateDeces;
    }

    public String getLieuNaissance() {
        return lieuNaissance;
    }

    public void setLieuNaissance(String lieuNaissance) {
        this.lieuNaissance = lieuNaissance;
    }

    public String getNom() {
        return StringUtils.isNotEmpty(nom) ? nom.toUpperCase(Locale.FRANCE) : null;
    }

    public void setNom(String nom) {
        this.nom = nom;
    }
    
    public String getNomJeuneFille() {
        return nomJeuneFille;
    }

    public void setNomJeuneFille(String nomJeuneFille) {
        this.nomJeuneFille = nomJeuneFille;
    }

    /**
     * {@inheritDoc}
     */
    public String getPrenom() {
        String libellePrenom = prenom;
        if (StringUtils.isNotEmpty(prenom) && prenom.length() > 1) {
            libellePrenom = prenom.toString().substring(0, 1).toUpperCase() 
                          + prenom.toString().substring(1, prenom.toString().length());
        }
        return libellePrenom;
    }

    public void setPrenom(String prenom) {
        this.prenom = prenom;
    }
    
    public String getSituationFamiliale() {
        return situationFamiliale;
    }

    public void setSituationFamiliale(String situationFamiliale) {
        this.situationFamiliale = situationFamiliale;
    }

    public String getRegimeMatrimonial() {
        return regimeMatrimonial;
    }

    public void setRegimeMatrimonial(String regimeMatrimonial) {
        this.regimeMatrimonial = regimeMatrimonial;
    }

    public String getNbEnfants() {
        return nbEnfants;
    }

    public void setNbEnfants(String nbEnfants) {
        this.nbEnfants = nbEnfants;
    }

    /**
     * @return the statutProfessionnel1
     */
    public String getStatutProfessionnel1() {
        return statutProfessionnel1;
    }

    /**
     * @param statutProfessionnel1 the statutProfessionnel1 to set
     */
    public void setStatutProfessionnel1(String statutProfessionnel1) {
        this.statutProfessionnel1 = statutProfessionnel1;
    }

    /**
     * @return the statutProfessionnel2
     */
    public String getStatutProfessionnel2() {
        return statutProfessionnel2;
    }

    /**
     * @param statutProfessionnel2 the statutProfessionnel2 to set
     */
    public void setStatutProfessionnel2(String statutProfessionnel2) {
        this.statutProfessionnel2 = statutProfessionnel2;
    }

    /**
     * @return the statutProfessionnel3
     */
    public String getStatutProfessionnel3() {
        return statutProfessionnel3;
    }

    /**
     * @param statutProfessionnel3 the statutProfessionnel3 to set
     */
    public void setStatutProfessionnel3(String statutProfessionnel3) {
        this.statutProfessionnel3 = statutProfessionnel3;
    }

    /**
     * @return the statutProfessionnel4
     */
    public String getStatutProfessionnel4() {
        return statutProfessionnel4;
    }

    /**
     * @param statutProfessionnel4 the statutProfessionnel4 to set
     */
    public void setStatutProfessionnel4(String statutProfessionnel4) {
        this.statutProfessionnel4 = statutProfessionnel4;
    }

    public int getStatutProfessionnelNiveau() {
        return statutProfessionnelNiveau;
    }

    public void setStatutProfessionnelNiveau(int statutProfessionnelNiveau) {
        this.statutProfessionnelNiveau = statutProfessionnelNiveau;
    }
    
    public String getCpNaissance() {
        return cpNaissance;
    }

    public void setCpNaissance(String cpNaissance) {
        this.cpNaissance = cpNaissance;
    }

    public String getPaysNaissance() {
        return paysNaissance;
    }

    public void setPaysNaissance(String paysNaissance) {
        this.paysNaissance = paysNaissance;
    }

    public String getNationalite() {
        return nationalite;
    }

    public void setNationalite(String nationalite) {
        this.nationalite = nationalite;
    }
    
    public String getRegimeObligatoire() {
        return regimeObligatoire;
    }

    public void setRegimeObligatoire(String regimeObligatoire) {
        this.regimeObligatoire = regimeObligatoire;
    }
    
    public boolean isVivante() {
        return vivante;
    }

    public void setVivante(boolean vivante) {
        this.vivante = vivante;
    }
    
    public boolean isCollaborateurGenerali() {
        return collaborateurGenerali;
    }

    public void setCollaborateurGenerali(boolean collaborateurGenerali) {
        this.collaborateurGenerali = collaborateurGenerali;
    }
    
    public String getTutelle() {
        return tutelle;
    }

    public void setTutelle(String tutelle) {
        this.tutelle = tutelle;
    }

    public String getNomProtecteur() {
        return nomProtecteur;
    }

    public void setNomProtecteur(String nomProtecteur) {
        this.nomProtecteur = nomProtecteur;
    }
    
    /**
     * {@inheritDoc}
     */
    public String getRevenuAnnuel() {
        return revenuAnnuel;
    }

    /**
     * {@inheritDoc}
     */
    public void setRevenuAnnuel(String revenuAnnuel) {
        this.revenuAnnuel = revenuAnnuel;
    }

    /**
     * @return the anneeRevenu
     */
    public String getAnneeRevenu() {
        return anneeRevenu;
    }

    /**
     * @param anneeRevenu the anneeRevenu to set
     */
    public void setAnneeRevenu(String anneeRevenu) {
        this.anneeRevenu = anneeRevenu;
    }
    
    public String getPrecisionProfession() {
        return precisionProfession;
    }

    public void setPrecisionProfession(String precisionProfession) {
        this.precisionProfession = precisionProfession;
    }
    
    /**
     * {@inheritDoc}
     */
    public String getDenominationCourte() {
        return (StringUtils.isNotEmpty(nom) 
                        ? nom : StringUtils.EMPTY) + " " + (StringUtils.isNotEmpty(prenom) 
                                        ? prenom : StringUtils.EMPTY);
    }
    
}
